Repository navigation
dma: fix dma issue on BYT - #342
Conversation
There was a problem hiding this comment.
Probably best just to remove SW LLI then ?
There was a problem hiding this comment.
to enable HW LLI on BYT?
|
@lgirdwood @@ -491,6 +488,9 @@ static int dw_dma_stop(struct dma *dma, int channel)
dw_write(dma, DW_DMA_CHAN_EN, CHAN_DISABLE(channel));
#if DW_USE_HW_LLI
+ trace_dma_error("Dli");
+ trace_error_value(dw_read(dma, DW_DMA_CHAN_EN));
+ trace_error_value(channel);
lli = p->chan[channel].lli;
for (i = 0; i < p->chan[channel].desc_count; i++) {
lli->ctrl_hi &= ~DW_CTLH_DONE(1);
|
|
@tlauda Do you have any idea? |
|
@RanderWang I think on BYT you will need to write NULL to the next + 1 descriptor ptr. This way DMA will load it and see a STOP condition. |
|
@lgirdwood @xiulipan Actually xiuli implemented the HW LLI. |
|
@lgirdwood |
@lgirdwood I have tried this method, still failed. SSP is stopped after DMA stop. So I think DMA pointer does't move without ack from SSP. And I will go on debugging it. |
|
@RanderWang DMA must be stopped before (with DMA FIFO empty and channel in idle) before we stop SSP or other DAIs. |
Yes, it is just what I described in this patch. HW LLI can't resolve this issue and I found some regression issues with HW LLI enabled on BYT. My idea is that: the behavior of DMA on BYT is different with APL & CNL, so can we make a special stop function for BYT ? I will update my patch |
|
@lgirdwood Do you want to enable HW LLI on BYT now? my patch would base on your choice. |
|
@RanderWang @xiulipan yes, make special stop path for BYT with conditional compile. It should only touch dw-dma.c and create a new stop function(s). |
045e368 to
15f6fd7
Compare
|
update my patch , thanks for review |
|
@RanderWang can you split into 2 patches, one for wait and one for DMA and rebase (for conflicts). |
|
update my patch, thanks for review |
|
@RanderWang checkpatch errors. |
|
It is line over 80 characters. Do you need me to fix this ? |
The register status is checked by polling its value in request time Signed-off-by: Rander Wang <rander.wang@linux.intel.com>
It is caused by the change of removing dai waiting after stop. dma should not be stopped in dai_comp_trigger if HW LLI is not enable. At this time DMA is still working and it can't be stopped DMA engine would stop the channel automatically after each transfer. So just query channel status to stop dma on BYT Signed-off-by: Pan Xiuli <xiuli.pan@linux.intel.com> Signed-off-by: Rander Wang <rander.wang@linux.intel.com>
|
Ok, update my patch. sometimes, I don't like the limitation of 80 characters |
It is caused by the change of removing dai waiting after stop.
dma should not be stopped in dai_comp_trigger if HW LLI is not
enable. At this time DMA is still working and it can't be stopped
DMA engine would stop the channel automatically after each transfer.
Signed-off-by: Pan Xiuli xiuli.pan@linux.intel.com
Signed-off-by: Rander Wang rander.wang@linux.intel.com